// 简单封装请求方法 未登录状态码: 130012
import { apiBaseUrl } from './config';
import { requestErrorTip } from './tools';

// 跳到登录页面
function toLoginPage () {
	// 隐藏所有提示
	uni.hideToast();
	
	// 获取已存登录失败token值
	const getS = uni.getStorageSync('atkerro');
	if (getS) {
		return;
	}
	
	// 储存到session中（主要确保一个页面如果调用多个接口时，只显示一个提示窗口）;
	uni.setStorageSync('atkerro', '130012');
	
	// 获取历史路由
	let pages = getCurrentPages();
	let lg = pages.length;
	let historyRoute = pages[lg - 1];
	let redirect = '';
	let params = ''; // 页面参数
	
	if (historyRoute) {
		// #ifdef MP-WEIXIN
		let query = historyRoute['options'];
		// #endif
		
		// #ifndef MP-WEIXIN
		let query = historyRoute['$mp']['query'];
		// #endif
		
		redirect = `/${historyRoute['route']}`;
		params = encodeURIComponent(JSON.stringify(query));
	}
	
	// 错误提示（模态框）
	requestErrorTip('modelDouble', '您还未登录哦，请先重新登录！', () => {
		// 清除登录失败token-session值
		uni.removeStorageSync('atkerro');
		
		// 跳转登录页，判断是都添加回调地址
		let gotoLoginUrl = '/pages/account/login';
		if (redirect !== '') {
			gotoLoginUrl += '?redirect=' + redirect + '&params=' + params;
		}
		
		// 跳转到登录页
		uni.navigateTo({
			url: gotoLoginUrl
		});
	}, () => {
		// 清除登录失败token-session值
		uni.removeStorageSync('atkerro');
	});
};

export default function (options) {
	// 初始化参数
	const { url = '', data = {}, method = 'GET', success, fail, complete, loading = true } = options;
	// 获取本地存储的token
	const token = uni.getStorageSync('token') || '';
	// 如果有token,在请求头部加上token
	// const header = token ? { 'token': token } : {};
	
	data['address'] = url;
	if (token) {
		data['token'] = token;
	}
	
	if (loading) {
		// 默认开启加载动画
		uni.showLoading({title: '加载中', mask: true});
	}
	
	// 请求
	uni.request({
		url: apiBaseUrl,
		data: data,
		// header: header,
		method: method,
		success: (res) => {
			if (res.data.msg === '登录token不正确') {
				// 清除login_token
				uni.removeStorageSync('login_token');
				// 跳到登录页面
				toLoginPage();
				return;
			}
			success && success(res.data);
		},
		fail: (err) => {
			fail && fail(err);
		},
		complete: (res) => {
			complete && complete(res);
			if (loading) {
				//关闭加载中
				setTimeout(function () {uni.hideLoading();}, 100);
			}
		}
	});
};